// This is a TextMate grammar distributed by `starry-night`.
// This grammar is developed at
// <https://github.com/lifeart/vsc-ember-syntax>
// and licensed `mit`.
// See <https://github.com/wooorm/starry-night> for more info.
/**
 * @import {Grammar} from '@wooorm/starry-night'
 */

/** @type {Grammar} */
const grammar = {
  dependencies: ['source.js'],
  extensions: ['.gjs'],
  injections: {
    'L:source.gjs -comment -(string -meta.embedded)': {
      patterns: [{include: '#main'}]
    }
  },
  names: ['glimmer-js'],
  patterns: [{include: '#main'}, {include: 'source.js'}],
  repository: {
    'as-keyword': {match: '\\s\\b(as)\\b(?=\\s\\|)', name: 'keyword.control'},
    'as-params': {
      begin: '(?<!\\|)(\\|)',
      beginCaptures: {
        1: {name: 'constant.other.symbol.begin.ember-handlebars'}
      },
      end: '(\\|)(?!\\|)',
      endCaptures: {1: {name: 'constant.other.symbol.end.ember-handlebars'}},
      name: 'keyword.block-params.ember-handlebars',
      patterns: [{include: '#variable'}]
    },
    attention: {
      match:
        '@?(TODO|FIXME|CHANGED|XXX|IDEA|HACK|NOTE|REVIEW|NB|BUG|QUESTION|TEMP)\\b',
      name: 'storage.type.class.${1:/downcase}'
    },
    boolean: {
      captures: {
        0: {name: 'string.regexp'},
        1: {name: 'string.regexp'},
        2: {name: 'string.regexp'}
      },
      match: 'true|false|undefined|null'
    },
    'component-tag': {
      begin: '(<\\/?)(@|this.)?([a-zA-Z0-9-_\\$:\\.]+)\\b',
      beginCaptures: {
        1: {name: 'punctuation.definition.tag'},
        2: {
          name: 'support.function',
          patterns: [
            {match: '(@|this)', name: 'variable.language'},
            {match: '(\\.)+', name: 'punctuation.definition.tag'}
          ]
        },
        3: {
          name: 'entity.name.type',
          patterns: [
            {include: '#glimmer-component-path'},
            {match: '(@|:|\\$)', name: 'markup.bold'}
          ]
        }
      },
      end: '(\\/?)(>)',
      endCaptures: {
        1: {name: 'punctuation.definition.tag'},
        2: {name: 'punctuation.definition.tag'}
      },
      name: 'meta.tag.any.ember-handlebars',
      patterns: [{include: '#tag-like-content'}]
    },
    digit: {
      captures: {
        0: {name: 'constant.numeric'},
        1: {name: 'constant.numeric'},
        2: {name: 'constant.numeric'}
      },
      match: '\\d*(\\.)?\\d+'
    },
    entities: {
      patterns: [
        {
          captures: {
            1: {name: 'punctuation.definition.entity.html.ember-handlebars'},
            3: {name: 'punctuation.definition.entity.html.ember-handlebars'}
          },
          match: '(&)([a-zA-Z0-9]+|#[0-9]+|#x[0-9a-fA-F]+)(;)',
          name: 'constant.character.entity.html.ember-handlebars'
        },
        {
          match: '&',
          name: 'invalid.illegal.bad-ampersand.html.ember-handlebars'
        }
      ]
    },
    'glimmer-argument': {
      captures: {
        1: {
          name: 'entity.other.attribute-name.ember-handlebars.argument',
          patterns: [{match: '(@)', name: 'markup.italic'}]
        },
        2: {name: 'punctuation.separator.key-value.html.ember-handlebars'}
      },
      match: '\\s(@[a-zA-Z0-9:_.-]+)(=)?'
    },
    'glimmer-as-stuff': {
      patterns: [{include: '#as-keyword'}, {include: '#as-params'}]
    },
    'glimmer-block': {
      begin: '({{~?)(#|/)(([@\\$a-zA-Z0-9_/.-]+))',
      captures: {
        1: {name: 'punctuation.definition.tag'},
        2: {name: 'punctuation.definition.tag'},
        3: {
          name: 'keyword.control',
          patterns: [
            {include: '#glimmer-component-path'},
            {match: '(\\/)+', name: 'punctuation.definition.tag'},
            {match: '(\\.)+', name: 'punctuation.definition.tag'}
          ]
        }
      },
      end: '(~?}})',
      name: 'entity.expression.ember-handlebars',
      patterns: [
        {include: '#glimmer-as-stuff'},
        {include: '#glimmer-supexp-content'}
      ]
    },
    'glimmer-bools': {
      captures: {
        0: {name: 'keyword.operator'},
        1: {name: 'keyword.operator'},
        2: {name: 'string.regexp'},
        3: {name: 'string.regexp'},
        4: {name: 'keyword.operator'}
      },
      match: '({{~?)(true|false|null|undefined|\\d*(\\.)?\\d+)(~?}})',
      name: 'entity.expression.ember-handlebars'
    },
    'glimmer-comment-block': {
      begin: '{{!--',
      captures: {0: {name: 'punctuation.definition.block.comment.glimmer'}},
      end: '--}}',
      name: 'comment.block.glimmer',
      patterns: [{include: '#script'}, {include: '#attention'}]
    },
    'glimmer-comment-inline': {
      begin: '{{!',
      captures: {0: {name: 'punctuation.definition.block.comment.glimmer'}},
      end: '}}',
      name: 'comment.inline.glimmer',
      patterns: [{include: '#script'}, {include: '#attention'}]
    },
    'glimmer-component-path': {
      captures: {1: {name: 'punctuation.definition.tag'}},
      match: '(::|_|\\$|\\.)'
    },
    'glimmer-control-expression': {
      begin: '({{~?)(([-a-zA-Z_0-9/]+)\\s)',
      captures: {
        1: {name: 'keyword.operator'},
        2: {name: 'keyword.operator'},
        3: {name: 'keyword.control'}
      },
      end: '(~?}})',
      name: 'entity.expression.ember-handlebars',
      patterns: [{include: '#glimmer-supexp-content'}]
    },
    'glimmer-else-block': {
      captures: {
        0: {name: 'punctuation.definition.tag'},
        1: {name: 'punctuation.definition.tag'},
        2: {name: 'keyword.control'},
        3: {
          name: 'keyword.control',
          patterns: [
            {include: '#glimmer-subexp'},
            {include: '#string-single-quoted-handlebars'},
            {include: '#string-double-quoted-handlebars'},
            {include: '#boolean'},
            {include: '#digit'},
            {include: '#param'},
            {include: '#glimmer-parameter-name'},
            {include: '#glimmer-parameter-value'}
          ]
        },
        4: {name: 'punctuation.definition.tag'}
      },
      match: '({{~?)(else\\s[a-z]+\\s|else)([()@a-zA-Z0-9\\.\\s\\b]+)?(~?}})',
      name: 'entity.expression.ember-handlebars'
    },
    'glimmer-expression': {
      begin: '({{~?)(([()\\s@a-zA-Z0-9_.-]+))',
      captures: {
        1: {name: 'keyword.operator'},
        2: {name: 'keyword.operator'},
        3: {
          name: 'support.function',
          patterns: [
            {match: '[(]+', name: 'string.regexp'},
            {match: '[)]+', name: 'string.regexp'},
            {match: '(\\.)+', name: 'punctuation.definition.tag'},
            {include: '#glimmer-supexp-content'}
          ]
        }
      },
      end: '(~?}})',
      name: 'entity.expression.ember-handlebars',
      patterns: [{include: '#glimmer-supexp-content'}]
    },
    'glimmer-expression-property': {
      begin: '({{~?)((@|this.)([a-zA-Z0-9_.-]+))',
      captures: {
        1: {name: 'keyword.operator'},
        2: {name: 'keyword.operator'},
        3: {
          name: 'support.function',
          patterns: [
            {match: '(@|this)', name: 'variable.language'},
            {match: '(\\.)+', name: 'punctuation.definition.tag'}
          ]
        },
        4: {
          name: 'support.function',
          patterns: [{match: '(\\.)+', name: 'punctuation.definition.tag'}]
        }
      },
      end: '(~?}})',
      name: 'entity.expression.ember-handlebars',
      patterns: [{include: '#glimmer-supexp-content'}]
    },
    'glimmer-parameter-name': {
      captures: {
        1: {name: 'variable.parameter.name.ember-handlebars'},
        2: {name: 'punctuation.definition.expression.ember-handlebars'}
      },
      match: '\\b([a-zA-Z0-9_-]+)(\\s?=)'
    },
    'glimmer-parameter-value': {
      captures: {
        1: {
          name: 'support.function',
          patterns: [{match: '(\\.)+', name: 'punctuation.definition.tag'}]
        }
      },
      match: '\\b([a-zA-Z0-9:_.-]+)\\b(?!=)'
    },
    'glimmer-special-block': {
      captures: {
        0: {name: 'keyword.operator'},
        1: {name: 'keyword.operator'},
        2: {name: 'keyword.control'},
        3: {name: 'keyword.operator'}
      },
      match: '({{~?)(yield|outlet)(~?}})',
      name: 'entity.expression.ember-handlebars'
    },
    'glimmer-subexp': {
      begin: '(\\()([@a-zA-Z0-9.-]+)',
      captures: {1: {name: 'keyword.other'}, 2: {name: 'keyword.control'}},
      end: '(\\))',
      name: 'entity.subexpression.ember-handlebars',
      patterns: [{include: '#glimmer-supexp-content'}]
    },
    'glimmer-supexp-content': {
      patterns: [
        {include: '#glimmer-subexp'},
        {include: '#string-single-quoted-handlebars'},
        {include: '#string-double-quoted-handlebars'},
        {include: '#boolean'},
        {include: '#digit'},
        {include: '#param'},
        {include: '#glimmer-parameter-name'},
        {include: '#glimmer-parameter-value'}
      ]
    },
    'glimmer-unescaped-expression': {
      begin: '{{{',
      captures: {0: {name: 'keyword.operator'}},
      end: '}}}',
      name: 'entity.unescaped.expression.ember-handlebars',
      patterns: [
        {include: '#string-single-quoted-handlebars'},
        {include: '#string-double-quoted-handlebars'},
        {include: '#glimmer-subexp'},
        {include: '#param'}
      ]
    },
    'html-attribute': {
      captures: {
        1: {
          name: 'entity.other.attribute-name.ember-handlebars',
          patterns: [{match: '(\\.\\.\\.attributes)', name: 'markup.bold'}]
        },
        2: {name: 'punctuation.separator.key-value.html.ember-handlebars'}
      },
      match: '\\s([a-zA-Z0-9:_.-]+)(=)?'
    },
    'html-comment': {
      begin: '<!--',
      captures: {
        0: {name: 'punctuation.definition.comment.html.ember-handlebars'}
      },
      end: '--\\s*>',
      name: 'comment.block.html.ember-handlebars',
      patterns: [
        {include: '#attention'},
        {
          match: '--',
          name: 'invalid.illegal.bad-comments-or-CDATA.html.ember-handlebars'
        }
      ]
    },
    'html-tag': {
      begin: '(<\\/?)([a-z0-9-]+)(?!\\.|:)\\b',
      beginCaptures: {
        1: {name: 'punctuation.definition.tag'},
        2: {name: 'entity.name.tag.html.ember-handlebars'}
      },
      end: '(\\/?)(>)',
      endCaptures: {
        1: {name: 'punctuation.definition.tag'},
        2: {name: 'punctuation.definition.tag'}
      },
      name: 'meta.tag.any.ember-handlebars',
      patterns: [{include: '#tag-like-content'}]
    },
    main: {
      patterns: [
        {
          begin: '\\s*(<)(template)\\s*(>)',
          beginCaptures: {
            1: {name: 'punctuation.definition.tag.html'},
            2: {name: 'entity.name.tag.other.html'},
            3: {name: 'punctuation.definition.tag.html'}
          },
          end: '(</)(template)(>)',
          endCaptures: {
            1: {name: 'punctuation.definition.tag.html'},
            2: {name: 'entity.name.tag.other.html'},
            3: {name: 'punctuation.definition.tag.html'}
          },
          name: 'meta.js.embeddedTemplateWithoutArgs',
          patterns: [
            {include: '#style'},
            {include: '#script'},
            {include: '#glimmer-else-block'},
            {include: '#glimmer-bools'},
            {include: '#glimmer-special-block'},
            {include: '#glimmer-unescaped-expression'},
            {include: '#glimmer-comment-block'},
            {include: '#glimmer-comment-inline'},
            {include: '#glimmer-expression-property'},
            {include: '#glimmer-control-expression'},
            {include: '#glimmer-expression'},
            {include: '#glimmer-block'},
            {include: '#html-tag'},
            {include: '#component-tag'},
            {include: '#html-comment'},
            {include: '#entities'}
          ]
        },
        {
          begin: '(<)(template)',
          beginCaptures: {
            1: {name: 'punctuation.definition.tag.html'},
            2: {name: 'entity.name.tag.other.html'}
          },
          end: '(</)(template)(>)',
          endCaptures: {
            1: {name: 'punctuation.definition.tag.html'},
            2: {name: 'entity.name.tag.other.html'},
            3: {name: 'punctuation.definition.tag.html'}
          },
          name: 'meta.js.embeddedTemplateWithArgs',
          patterns: [
            {
              begin: '(?<=\\<template)',
              end: '(?=\\>)',
              patterns: [{include: '#tag-like-content'}]
            },
            {
              begin: '(>)',
              beginCaptures: {1: {name: 'punctuation.definition.tag.end.js'}},
              contentName: 'meta.html.embedded.block',
              end: '(?=</template>)',
              patterns: [
                {include: '#style'},
                {include: '#script'},
                {include: '#glimmer-else-block'},
                {include: '#glimmer-bools'},
                {include: '#glimmer-special-block'},
                {include: '#glimmer-unescaped-expression'},
                {include: '#glimmer-comment-block'},
                {include: '#glimmer-comment-inline'},
                {include: '#glimmer-expression-property'},
                {include: '#glimmer-control-expression'},
                {include: '#glimmer-expression'},
                {include: '#glimmer-block'},
                {include: '#html-tag'},
                {include: '#component-tag'},
                {include: '#html-comment'},
                {include: '#entities'}
              ]
            }
          ]
        },
        {
          begin: '(?x)(\\b(?:\\w+\\.)*(?:hbs|html)\\s*)(`)',
          beginCaptures: {
            1: {name: 'entity.name.function.tagged-template.js'},
            2: {name: 'punctuation.definition.string.template.begin.js'}
          },
          contentName: 'meta.embedded.block.html',
          end: '(`)',
          endCaptures: {
            0: {name: 'string.js'},
            1: {name: 'punctuation.definition.string.template.end.js'}
          },
          patterns: [
            {include: 'source.ts#template-substitution-element'},
            {include: '#style'},
            {include: '#script'},
            {include: '#glimmer-else-block'},
            {include: '#glimmer-bools'},
            {include: '#glimmer-special-block'},
            {include: '#glimmer-unescaped-expression'},
            {include: '#glimmer-comment-block'},
            {include: '#glimmer-comment-inline'},
            {include: '#glimmer-expression-property'},
            {include: '#glimmer-control-expression'},
            {include: '#glimmer-expression'},
            {include: '#glimmer-block'},
            {include: '#html-tag'},
            {include: '#component-tag'},
            {include: '#html-comment'},
            {include: '#entities'}
          ]
        },
        {
          begin: '((createTemplate|hbs|html))(\\()',
          beginCaptures: {
            1: {name: 'entity.name.function.ts'},
            2: {name: 'meta.function-call.ts'},
            3: {name: 'meta.brace.round.ts'}
          },
          contentName: 'meta.embedded.block.html',
          end: '(\\))',
          endCaptures: {1: {name: 'meta.brace.round.ts'}},
          patterns: [
            {
              begin: '((`|\'|"))',
              beginCaptures: {
                1: {name: 'string.template.ts'},
                2: {name: 'punctuation.definition.string.template.begin.ts'}
              },
              end: '((`|\'|"))',
              endCaptures: {
                1: {name: 'string.template.ts'},
                2: {name: 'punctuation.definition.string.template.end.ts'}
              },
              patterns: [
                {include: '#style'},
                {include: '#script'},
                {include: '#glimmer-else-block'},
                {include: '#glimmer-bools'},
                {include: '#glimmer-special-block'},
                {include: '#glimmer-unescaped-expression'},
                {include: '#glimmer-comment-block'},
                {include: '#glimmer-comment-inline'},
                {include: '#glimmer-expression-property'},
                {include: '#glimmer-control-expression'},
                {include: '#glimmer-expression'},
                {include: '#glimmer-block'},
                {include: '#html-tag'},
                {include: '#component-tag'},
                {include: '#html-comment'},
                {include: '#entities'}
              ]
            }
          ]
        },
        {
          begin: '((precompileTemplate)\\s*)(\\()',
          beginCaptures: {
            1: {name: 'entity.name.function.ts'},
            2: {name: 'meta.function-call.ts'},
            3: {name: 'meta.brace.round.ts'}
          },
          end: '(\\))',
          endCaptures: {1: {name: 'meta.brace.round.ts'}},
          patterns: [
            {
              begin: '((`|\'|"))',
              beginCaptures: {
                1: {name: 'string.template.ts'},
                2: {name: 'punctuation.definition.string.template.begin.ts'}
              },
              contentName: 'meta.embedded.block.html',
              end: '((`|\'|"))',
              endCaptures: {
                1: {name: 'string.template.ts'},
                2: {name: 'punctuation.definition.string.template.end.ts'}
              },
              patterns: [
                {include: '#style'},
                {include: '#script'},
                {include: '#glimmer-else-block'},
                {include: '#glimmer-bools'},
                {include: '#glimmer-special-block'},
                {include: '#glimmer-unescaped-expression'},
                {include: '#glimmer-comment-block'},
                {include: '#glimmer-comment-inline'},
                {include: '#glimmer-expression-property'},
                {include: '#glimmer-control-expression'},
                {include: '#glimmer-expression'},
                {include: '#glimmer-block'},
                {include: '#html-tag'},
                {include: '#component-tag'},
                {include: '#html-comment'},
                {include: '#entities'}
              ]
            },
            {include: 'source.ts#object-literal'},
            {include: 'source.ts'}
          ]
        }
      ]
    },
    param: {
      captures: {
        0: {
          name: 'support.function',
          patterns: [
            {match: '(@|this)', name: 'variable.language'},
            {match: '(\\.)+', name: 'punctuation.definition.tag'}
          ]
        },
        1: {
          name: 'support.function',
          patterns: [{match: '(\\.)+', name: 'punctuation.definition.tag'}]
        }
      },
      match: '(@|this.)([a-zA-Z0-9_.-]+)'
    },
    script: {
      begin: '(^[ \\t]+)?(?=<(?i:script)\\b(?!-))',
      beginCaptures: {
        1: {name: 'punctuation.whitespace.embedded.leading.html'}
      },
      end: '(?!\\G)([ \\t]*$\\n?)?',
      endCaptures: {1: {name: 'punctuation.whitespace.embedded.trailing.html'}},
      patterns: [
        {
          begin: '(<)((?i:script))\\b',
          beginCaptures: {
            0: {name: 'meta.tag.metadata.script.start.html'},
            1: {name: 'punctuation.definition.tag.begin.html'},
            2: {name: 'entity.name.tag.html'}
          },
          end: '(/)((?i:script))(>)',
          endCaptures: {
            0: {name: 'meta.tag.metadata.script.end.html'},
            1: {name: 'punctuation.definition.tag.begin.html'},
            2: {name: 'entity.name.tag.html'},
            3: {name: 'punctuation.definition.tag.end.html'}
          },
          name: 'meta.embedded.block.html',
          patterns: [
            {
              begin: '\\G',
              end: '(?=/)',
              patterns: [
                {
                  begin: '(>)',
                  beginCaptures: {
                    0: {name: 'meta.tag.metadata.script.start.html'},
                    1: {name: 'punctuation.definition.tag.end.html'}
                  },
                  end: '((<))(?=/(?i:script))',
                  endCaptures: {
                    0: {name: 'meta.tag.metadata.script.end.html'},
                    1: {name: 'punctuation.definition.tag.begin.html'},
                    2: {name: 'source.js-ignored-vscode'}
                  },
                  patterns: [
                    {
                      begin: '\\G',
                      end: '(?=</(?i:script))',
                      name: 'source.js',
                      patterns: [
                        {
                          begin: '(^[ \\t]+)?(?=//)',
                          beginCaptures: {
                            1: {
                              name: 'punctuation.whitespace.comment.leading.js'
                            }
                          },
                          end: '(?!\\G)',
                          patterns: [
                            {
                              begin: '//',
                              beginCaptures: {
                                0: {name: 'punctuation.definition.comment.js'}
                              },
                              end: '(?=</script)|\\n',
                              name: 'comment.line.double-slash.js'
                            }
                          ]
                        },
                        {
                          begin: '/\\*',
                          captures: {
                            0: {name: 'punctuation.definition.comment.js'}
                          },
                          end: '\\*/|(?=</script)',
                          name: 'comment.block.js'
                        },
                        {include: 'source.js'}
                      ]
                    }
                  ]
                },
                {
                  begin:
                    '(?ix:\n\t\t\t\t\t\t\t\t\t\t\t\t(?=\n\t\t\t\t\t\t\t\t\t\t\t\t\ttype\\s*=\\s*\n\t\t\t\t\t\t\t\t\t\t\t\t\t(\'|"|)\n\t\t\t\t\t\t\t\t\t\t\t\t\ttext/\n\t\t\t\t\t\t\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tx-handlebars\n\t\t\t\t\t\t\t\t\t\t\t\t\t  | (x-(handlebars-)?|ng-)?template\n\t\t\t\t\t\t\t\t\t\t\t\t\t  | html\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t[\\s"\'>]\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t)',
                  end: '((<))(?=/(?i:script))',
                  endCaptures: {
                    0: {name: 'meta.tag.metadata.script.end.html'},
                    1: {name: 'punctuation.definition.tag.begin.html'},
                    2: {name: 'text.html.basic'}
                  },
                  patterns: [
                    {
                      begin: '(?!\\G)',
                      end: '(?=</(?i:script))',
                      name: 'text.html.basic',
                      patterns: [{include: 'text.html.basic'}]
                    }
                  ]
                },
                {
                  begin: '(?=(?i:type))',
                  end: '(<)(?=/(?i:script))',
                  endCaptures: {
                    0: {name: 'meta.tag.metadata.script.end.html'},
                    1: {name: 'punctuation.definition.tag.begin.html'}
                  }
                },
                {include: '#string-double-quoted-html'},
                {include: '#string-single-quoted-html'},
                {include: '#glimmer-argument'},
                {include: '#html-attribute'}
              ]
            }
          ]
        }
      ]
    },
    'string-double-quoted-handlebars': {
      begin: '"',
      beginCaptures: {
        0: {name: 'punctuation.definition.string.begin.ember-handlebars'}
      },
      end: '"',
      endCaptures: {
        0: {name: 'punctuation.definition.string.end.ember-handlebars'}
      },
      name: 'string.quoted.double.ember-handlebars',
      patterns: [
        {match: '\\\\"', name: 'constant.character.escape.ember-handlebars'}
      ]
    },
    'string-double-quoted-html': {
      begin: '"',
      beginCaptures: {
        0: {name: 'punctuation.definition.string.begin.ember-handlebars'}
      },
      end: '"',
      endCaptures: {
        0: {name: 'punctuation.definition.string.end.ember-handlebars'}
      },
      name: 'string.quoted.double.html.ember-handlebars',
      patterns: [
        {match: '\\\\"', name: 'constant.character.escape.ember-handlebars'},
        {include: '#glimmer-bools'},
        {include: '#glimmer-expression-property'},
        {include: '#glimmer-control-expression'},
        {include: '#glimmer-expression'},
        {include: '#glimmer-block'}
      ]
    },
    'string-single-quoted-handlebars': {
      begin: "'",
      beginCaptures: {
        0: {name: 'punctuation.definition.string.begin.ember-handlebars'}
      },
      end: "'",
      endCaptures: {
        0: {name: 'punctuation.definition.string.end.ember-handlebars'}
      },
      name: 'string.quoted.single.ember-handlebars',
      patterns: [
        {match: "\\\\'", name: 'constant.character.escape.ember-handlebars'}
      ]
    },
    'string-single-quoted-html': {
      begin: "'",
      beginCaptures: {
        0: {name: 'punctuation.definition.string.begin.ember-handlebars'}
      },
      end: "'",
      endCaptures: {
        0: {name: 'punctuation.definition.string.end.ember-handlebars'}
      },
      name: 'string.quoted.single.html.ember-handlebars',
      patterns: [
        {match: "\\\\'", name: 'constant.character.escape.ember-handlebars'},
        {include: '#glimmer-bools'},
        {include: '#glimmer-expression-property'},
        {include: '#glimmer-control-expression'},
        {include: '#glimmer-expression'},
        {include: '#glimmer-block'}
      ]
    },
    style: {
      begin: '(^[ \\t]+)?(?=<(?i:style)\\b(?!-))',
      beginCaptures: {
        1: {name: 'punctuation.whitespace.embedded.leading.html'}
      },
      end: '(?!\\G)([ \\t]*$\\n?)?',
      endCaptures: {1: {name: 'punctuation.whitespace.embedded.trailing.html'}},
      patterns: [
        {
          begin: '(?i)(<)(style)(?=\\s|/?>)',
          beginCaptures: {
            0: {name: 'meta.tag.metadata.style.start.html'},
            1: {name: 'punctuation.definition.tag.begin.html'},
            2: {name: 'entity.name.tag.html'}
          },
          end: '(?i)((<)/)(style)\\s*(>)',
          endCaptures: {
            0: {name: 'meta.tag.metadata.style.end.html'},
            1: {name: 'punctuation.definition.tag.begin.html'},
            2: {name: 'source.css-ignored-vscode'},
            3: {name: 'entity.name.tag.html'},
            4: {name: 'punctuation.definition.tag.end.html'}
          },
          name: 'meta.embedded.block.html',
          patterns: [
            {
              begin: '\\G',
              captures: {1: {name: 'punctuation.definition.tag.end.html'}},
              end: '(>)',
              name: 'meta.tag.metadata.style.start.html',
              patterns: [
                {include: '#glimmer-argument'},
                {include: '#html-attribute'}
              ]
            },
            {
              begin: '(?!\\G)',
              end: '(?=</(?i:style))',
              name: 'source.css',
              patterns: [{include: 'source.css'}]
            }
          ]
        }
      ]
    },
    'tag-like-content': {
      patterns: [
        {include: '#glimmer-bools'},
        {include: '#glimmer-unescaped-expression'},
        {include: '#glimmer-comment-block'},
        {include: '#glimmer-comment-inline'},
        {include: '#glimmer-expression-property'},
        {include: '#boolean'},
        {include: '#digit'},
        {include: '#glimmer-control-expression'},
        {include: '#glimmer-expression'},
        {include: '#glimmer-block'},
        {include: '#string-double-quoted-html'},
        {include: '#string-single-quoted-html'},
        {include: '#glimmer-as-stuff'},
        {include: '#glimmer-argument'},
        {include: '#html-attribute'}
      ]
    },
    variable: {match: '\\b([a-zA-Z0-9-_]+)\\b', name: 'support.function'}
  },
  scopeName: 'source.gjs'
}

export default grammar
